매핑된 타입은 TypeScript에서 기존 객체 타입을 기반으로 새로운 타입을 동적으로 생성할 수 있게 해주는 강력한 기능입니다.
keyof
, in
, T[K]
등의 키워드를 조합하여 타입의 각 속성에 대해 일괄적인 변형, 속성 필터링, 속성 추가/삭제 등을 할 수 있습니다.
keyof
- 키 추출keyof
는 객체 타입의 모든 키를 유니언 타입으로 추출하는 연산자입니다.
type Person = {
name: string;
age: number;
};
type Keys = keyof Person; // 결과: 'name' | 'age'
✔️ keyof
는 객체 타입의 키들을 유니언 문자열 리터럴 타입으로 추출합니다.
in
- 반복적인 매핑type Mapped<T> = {
[K in keyof T]: T[K];
};
✔️ in
은 유니언 타입으로 추출된 키들을 순회하며 각각의 키에 대해 원하는 처리를 적용합니다.
T[K]
- 인덱싱 타입type ValueOfName = Person["name"]; // 결과: string
✔️ T[K]
는 키 K에 해당하는 속성 값 타입을 가져옵니다.
?
)로 만들기type Optional<T> = { [K in keyof T]?: T[K] }
type Person = { name: string; age: number; };
type OptionalPerson = Optional<Person>;
// 결과: { name?: string; age?: number; }
type ReadOnly<T> = { readonly [K in keyof T]: T[K] }
type Person = { name: string; age: number; };
type ReadOnlyPerson = ReadOnly<Person>;
// 결과: { readonly name: string; readonly age: number; }
type ExtractOptional<T> = {
[K in typeof T] : T[K]
}
type Obj = { name: string; age?: number; isActive?: boolean; };
type OptionalProps = ExtractOptional<Obj>;
// 결과: 'age' | 'isActive'